package net.huashitong.ssydt.provider.exam.service;


import net.huashitong.ssydt.exam.entity.SsExamQuestion;
import net.huashitong.ssydt.exam.entity.vo.*;
import net.huashitong.ssydt.sys.entity.SsSysBas;

import java.util.List;

/**
 * @author <a href="mailto:yhy23456@163.com">huiyang.yu</a>
 * @since 2017.08.23
 */
public interface ExamService {
    /**
     * 获取我的考试信息
     *
     * @param userId
     * @return
     */
    ExamInfoVO getInfosMy(String userId);

    /**
     * 修改我的考试信息
     *
     * @param userId
     * @param examInfoVO
     */
    void putInfosMy(String userId, ExamInfoVO examInfoVO);

    /**
     * 获取我的刷题进度
     *
     * @param userId
     * @return
     */
    TestsOutVo getTestsMy(String userId);

    /**
     * 制定（重置）刷题计划
     *
     * @param testsInVo
     */
    void postTests(String testsInVo);

    /**
     * 开始（继续）全真刷题
     *
     * @param userId
     * @return
     */
    TestRecordVo postTestRecords(String userId);

    /**
     * 同步全真刷题进度
     *
     * @param recordId
     * @param testRecordsByIdInVo
     */
    void putTestRecordsById(Long recordId, TestRecordsByIdInVo testRecordsByIdInVo);

    /**
     * 全真刷题交卷
     *
     * @param recordId
     * @param testRecordsByIdInVo
     */
    void postTestRecordsById(Long recordId, TestRecordsByIdInVo testRecordsByIdInVo);

    /**
     * 查看全真刷题报告
     *
     * @param recordId
     * @return
     */
    TestRecordVo getTestRecordsById(Long recordId);

    /**
     * 获取我的刷题记录列表
     *
     * @param userId
     * @return
     */
    List<TestRecordsListOutVO> getTestRecordsListMy(TestRecordsListInVO userId);

    /**
     * 清除（停用）全真刷题计划
     *
     * @param userId
     */
    void deleteTests(String userId);

    /**
     * 获取试卷（题库）列表
     *
     * @param userId
     * @param paperListInVO
     * @return
     */
    List<PaperListOutVO> getPapers(String userId, PaperListInVO paperListInVO);

    /**
     * 试卷（题库）作答
     *
     * @param userId
     * @param paperId
     * @return
     */
    PaperRecordOutVO postPaperRecords(String userId, Long paperId);

    /**
     * 同步试卷（题库）进度
     *
     * @param recordId
     * @param paperRecordInVO
     */
    void putRecords(Long recordId, PaperRecordInVO paperRecordInVO);

    /**
     * 试卷（题库）交卷
     *
     * @param recordId
     * @param paperRecordInVO
     */
    void postRecords(Long recordId, PaperRecordInVO paperRecordInVO);

    /**
     * 获取试卷（题库）作答报告
     *
     * @param recordId
     * @return
     */
    PaperRecordOutVO getRecords(Long recordId);

    /**
     * 我的错题列表
     *
     * @param userId 用户id
     * @return
     */
    List<QuestionErrorListOutVO> getErrors(QuestionErrorCollectionListInVO userId);

    /**
     * 获取错题内容列表
     *
     * @param userId
     * @param belongYearMonth
     * @return
     */
    QuestionErrorVO getErrorQuestions(String userId, String belongYearMonth);

    /**
     * 同步错题进度
     *
     * @param belongYearMonth
     * @param errorRecordsInVO
     */
    void putErrorRecords(String belongYearMonth, ErrorRecordsInVO errorRecordsInVO);

    /**
     * 移除错题
     *
     * @param errorQuestionId
     */
    void deleteErrorQuestion(Long errorQuestionId);

    /**
     * 清空错题
     *
     * @param userId
     */
    void deleteErrorQuestions(String userId);

    /**
     * 题库分类列表
     *
     * @return
     */
    List<SsSysBas> getPaperTypes();

    /**
     * 题库地区列表
     *
     * @return
     */
    List<SsSysBas> getPaperAreas();

    /**
     * 题库年月列表
     *
     * @return
     */
    List<SsSysBas> getPaperYearMonths();

    /**
     * 收藏列表
     *
     * @param questionErrorCollectionListInVO
     * @return
     */
    List<QuestionCollectionListOutVO> getCollections(QuestionErrorCollectionListInVO questionErrorCollectionListInVO);

    /**
     * 获取收藏内容列表
     *
     * @param userId
     * @param belongYearMonth
     * @return
     */
    QuestionCollectionVO getCollectionQuestions(String userId, String belongYearMonth);

    /**
     * 移除收藏
     *
     * @param userId
     * @param collectionQuestionId
     */
    void deleteCollectionQuestion(String userId, Long collectionQuestionId);

    /**
     * 清空收藏
     *
     * @param userId
     */
    void deleteCollectionQuestions(String userId);

    /**
     * 添加题目收藏
     *
     * @param userId
     * @param collectionQuestionVO
     */
    void postCollectionQuestions(String userId, CollectionQuestionVO collectionQuestionVO);

    /**
     * 热门题库列表
     *
     * @return
     */
    List<PaperTypeHotVO> getPaperTypeHots();

    /**
     * 文章测评作答
     *
     * @param userId
     * @param articleId
     * @return
     */
    ArticleTestRecordOutVO postArticleRecords(String userId, Long articleId);

    /**
     * 同步文章测评进度
     *
     * @param recordId
     * @param articleRecordInVO
     */
    void putArticleRecords(Long recordId, ArticleRecordInVO articleRecordInVO);

    /**
     * 文章测评交卷
     *
     * @param recordId
     * @param articleRecordInVO
     */
    void postArticleRecordsById(Long recordId, ArticleRecordInVO articleRecordInVO);

    /**
     * 文章测评报告
     *
     * @param recordId
     * @return
     */
    ArticleTestRecordOutVO getArticleRecords(Long recordId);

    List<Option> getOptions(Long ssExamQuestionId);

    BaseQuestion getBaseQuestion(Long questionId);

    BaseQuestion getBaseQuestion(SsExamQuestion ssExamQuestion);
}
